Appendix overview
In this appendix, I report additional exploratory analyses of the organization of the sets of “conceptual units” that were excluded from the main text of Chapter IV, including: (a) Analyses using children’s own scales to assess organization among older children (7-9y of age) and younger children (4-6y of age) in Study 3 and among children (4-5y of age) in Study 4; and (b) XX.
Using children’s own scales
In Chapter IV, I used adults’ EFA solution to construct BODY, HEART, and MIND scales and used these scales to assess the organization of these adult-like conceptual units among both adult and child samples. For Study 2, I also used 7- to 9-year-old children’s own EFA solution to construct a separate set of scales based on children’s own conceptual units and conducted a separate set of analyses of the organization of these “child-like” conceptual units. Here I present a parallel set of analyses using children’s own EFA solutions (rather than adults’) to assess the organization of conceptual units among both older children (7-9y of age) and younger children (4-6y of age) in Study 3, as well as among children (4-5y of age) in Study 4.
Study 3
Older children, using their own scales
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 6 items each; see Table 4.3.
Visualization
Analysis of asymmetries
Younger children, using their own scales (three-factor solution)
XX suggested by WDM
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY*, HEART*, and MIND scales of 5 items each; see Table 4.3.
Visualization
Analysis of asymmetries
Younger children, using their own scales (two-factor solution)
Scale construction
XX suggested by parallel analysis
Following the steps described in “General analysis plan,” above, yielded BODY-HEART and MIND scales of 6 items each; see Table 4.3.
Visualization
Analysis of asymmetries
Discussion
Table 4.3: Scales for each of the conceptual units (factors) identified by EFA for US Adults, older children, and younger children in Study 3 (see Chapter III). For younger children, this includes scales for both three- and two-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of older children and adults, such that some mental capacities were included in different scales across age groups (e.g., feel scared was part of the BODY scale for older children and adults, but part of the HEART* scale for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
|
Younger children, 4-6y |
| Capacity |
Adults |
Older children, 7-9y |
3-factor solution |
2-factor solution |
| BODY scale |
| feel pain |
✓ |
✓ |
|
|
| get hungry |
✓ |
✓ |
✓ |
BODY-HEART |
| feel tired |
✓ |
✓ |
✓ |
|
| smell things |
✓ |
✓ |
✓ |
|
| feel scared |
✓ |
✓ |
HEART* |
|
| feel sick... |
✓ |
|
|
BODY-HEART |
| get angry |
|
✓ |
✓ |
BODY-HEART |
| HEART scale |
| feel happy |
|
|
✓ |
BODY-HEART |
| feel guilty |
✓ |
✓ |
MIND |
MIND |
| get hurt feelings |
✓ |
✓ |
BODY* |
|
| feel embarrassed |
✓ |
✓ |
✓ |
|
| feel proud |
✓ |
✓ |
✓ |
BODY-HEART |
| feel love |
✓ |
✓ |
✓ |
|
| feel sad |
✓ |
✓ |
|
BODY-HEART |
| MIND scale |
| sense...far away |
✓ |
✓ |
✓ |
✓ |
| sense temperatures |
✓ |
✓ |
✓ |
✓ |
| figure out how to do things |
✓ |
✓ |
✓ |
✓ |
| be aware of things |
✓ |
✓ |
|
|
| remember things |
✓ |
✓ |
✓ |
✓ |
| make choices |
✓ |
✓ |
|
✓ |


Study 4
Children, using their own scales (three-factor solution)
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY, HEART, and MIND scales of 3 items each; see Table 4.4.
Visualization
Analysis of asymmetries
Children, using their own scales (four-factor solution)
Scale construction
Following the steps described in “General analysis plan,” above, yielded BODY (nausea), BODY (other), HEART*, and MIND* scales of 3 items each; see Table 4.4.
Visualization
Analysis of asymmetries
Discussion
Table 4.4: Scales for each of the conceptual units (factors) identified by EFA for US Adults and children in Study 4 (see Chapter III). For children, this includes scales for both three- and four-factor EFA solutions. A checkmark indicates that a mental capacity was included in a scale for a particular sample. The conceptual units of younger children differed substantially from those of adults, such that some mental capacities were included in different scales across age groups (e.g., love someone was part of the HEART scale for adults, but part of the MIND* scale in the four-factor solution for younger children). In these cases, the name of the scale is provided (rather than a checkmark).
|
Children, 4-5y |
| Capacity |
Adults |
3-factor solution |
4-factor solution |
| BODY scale |
| get thirsty |
✓ |
✓ |
BODY (other) |
| feel hungry |
✓ |
✓ |
BODY (other) |
| smell things |
✓ |
✓ |
BODY (nausea) |
| feel tired |
✓ |
|
BODY (nausea) |
| feel sick |
✓ |
|
BODY (nausea) |
| HEART scale |
| love someone |
✓ |
✓ |
MIND* |
| get sad |
✓ |
|
✓ |
| hate someone |
✓ |
|
|
| feel sorry |
✓ |
✓ |
✓ |
| get lonely |
✓ |
✓ |
✓ |
| MIND scale |
| figure things out |
✓ |
|
|
| remember things |
✓ |
✓ |
✓ |
| know stuff |
✓ |
✓ |
✓ |
| think |
✓ |
✓ |
|
| hear |
✓ |
|
BODY (other) |


LS0tCnRpdGxlOiAiQXBwZW5kaXggQjogQWRkaXRpb25hbCBleHBsb3JhdGlvbnMgb2Ygb3JnYW5pemF0aW9uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC42NywKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBGLCBlY2hvID0gRikKYGBgCgpgYGB7cn0KIyAjIGZvciBrbml0dGluZyB0byAuZG9jeAojIG91dHB1dDoKIyAgIHdvcmRfZG9jdW1lbnQ6CiMgICAgIHJlZmVyZW5jZV9kb2N4OiAiLi93b3JkLXN0eWxlcy1yZWZlcmVuY2UuZG9jeCIKIyBhbHdheXNfYWxsb3dfaHRtbDogeWVzCiAgIAojICMgZm9yIGtuaXR0aW5nIHRvIC5uYi5odG1sIAojIG91dHB1dDoKIyAgIGh0bWxfbm90ZWJvb2s6CiMgICAgIHRvYzogeWVzCiMgICAgIHRvY19kZXB0aDogNAojICAgICB0b2NfZmxvYXQ6IHllcwpgYGAKCmBgYHtyfQojIHJ1biB1ci1zZXR1cCBzY3JpcHQgKHdoaWNoIHJ1bnMgb3RoZXIgc2NyaXB0cykKc291cmNlKCIuL3NjcmlwdHMvX1NFVFVQLlIiKQogCiMgbG9hZCBpbiBFRkFzICYgbmFtZXMgZnJvbSBDaGFwdGVycyBJSUkgJiBJVgpzb3VyY2UoIi4vc2NyaXB0cy9zdG9yZWRfY2gwMy5SIikKc291cmNlKCIuL3NjcmlwdHMvc3RvcmVkX2NoMDQuUiIpCmBgYAoKIyBBcHBlbmRpeCBvdmVydmlldwoKSW4gdGhpcyBhcHBlbmRpeCwgSSByZXBvcnQgYWRkaXRpb25hbCBleHBsb3JhdG9yeSBhbmFseXNlcyBvZiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZSBzZXRzIG9mICJjb25jZXB0dWFsIHVuaXRzIiB0aGF0IHdlcmUgZXhjbHVkZWQgZnJvbSB0aGUgbWFpbiB0ZXh0IG9mIENoYXB0ZXIgSVYsIGluY2x1ZGluZzogKGEpIEFuYWx5c2VzIHVzaW5nIGNoaWxkcmVuJ3Mgb3duIHNjYWxlcyB0byBhc3Nlc3Mgb3JnYW5pemF0aW9uIGFtb25nIG9sZGVyIGNoaWxkcmVuICg3LTl5IG9mIGFnZSkgYW5kIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkgb2YgYWdlKSBpbiBTdHVkeSAzIGFuZCBhbW9uZyBjaGlsZHJlbiAoNC01eSBvZiBhZ2UpIGluIFN0dWR5IDQ7IGFuZCAoYikgWFguCgoKIyBVc2luZyBjaGlsZHJlbidzIG93biBzY2FsZXMKCkluIENoYXB0ZXIgSVYsIEkgdXNlZCBhZHVsdHMnIEVGQSBzb2x1dGlvbiB0byBjb25zdHJ1Y3QgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyBhbmQgdXNlZCB0aGVzZSBzY2FsZXMgdG8gYXNzZXNzIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlc2UgYWR1bHQtbGlrZSBjb25jZXB0dWFsIHVuaXRzIGFtb25nIGJvdGggYWR1bHQgYW5kIGNoaWxkIHNhbXBsZXMuIEZvciBTdHVkeSAyLCBJIGFsc28gdXNlZCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3Mgb3duIEVGQSBzb2x1dGlvbiB0byBjb25zdHJ1Y3QgYSBzZXBhcmF0ZSBzZXQgb2Ygc2NhbGVzIGJhc2VkIG9uIGNoaWxkcmVuJ3Mgb3duIGNvbmNlcHR1YWwgdW5pdHMgYW5kIGNvbmR1Y3RlZCBhIHNlcGFyYXRlIHNldCBvZiBhbmFseXNlcyBvZiB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZXNlICJjaGlsZC1saWtlIiBjb25jZXB0dWFsIHVuaXRzLiBIZXJlIEkgcHJlc2VudCBhIHBhcmFsbGVsIHNldCBvZiBhbmFseXNlcyB1c2luZyBjaGlsZHJlbidzIG93biBFRkEgc29sdXRpb25zIChyYXRoZXIgdGhhbiBhZHVsdHMnKSB0byBhc3Nlc3MgdGhlIG9yZ2FuaXphdGlvbiBvZiBjb25jZXB0dWFsIHVuaXRzIGFtb25nIGJvdGggb2xkZXIgY2hpbGRyZW4gKDctOXkgb2YgYWdlKSBhbmQgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpIGluIFN0dWR5IDMsIGFzIHdlbGwgYXMgYW1vbmcgY2hpbGRyZW4gKDQtNXkgb2YgYWdlKSBpbiBTdHVkeSA0LgoKIyMgU3R1ZHkgMwoKIyMjIE9sZGVyIGNoaWxkcmVuLCB1c2luZyB0aGVpciBvd24gc2NhbGVzCgojIyMjIFNjYWxlIGNvbnN0cnVjdGlvbgoKYGBge3J9CiMgZG9uZSBpbiBjaDA0X29yZ2FuaXphdGlvbi5SbWQKIyBzY2FsZXNfZWZhX3dkbV9kM183OSA8LSByZWFkUkRTKGZpbGUgPSAiLi9zdG9yZWQvc2NhbGVzL3NjYWxlc19lZmFfd2RtX2QzXzc5IikKCmQzXzc5X3Njb3JlZF83OSA8LSBzY29yZV9mdW4oZDNfNzksIHNjYWxlc19lZmFfd2RtX2QzXzc5KQpzYXZlUkRTKGQzXzc5X3Njb3JlZF83OSwgZmlsZSA9ICIuL3N0b3JlZC9zY29yZWRfZGF0YS9kM183OV9zY29yZWRfNzkiKQpgYGAKCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzc5KWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfd2RtX2QzXzc5ICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuMy4KCiMjIyMgVmlzdWFsaXphdGlvbgoKYGBge3J9CnBsb3RzX2QzXzc5X3Njb3JlZF83OSA8LSByZWx2aXpfZnVuKGQzXzc5X3Njb3JlZF83OSwgY29sb3JzID0gY29sb3JzMDkpCmBgYAoKYGBge3J9CmZpZ19kM183OV9zY29yZWRfNzlfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2QzXzc5X3Njb3JlZF83OVtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDNfNzlfc2NvcmVkXzc5W1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM183OV9zY29yZWRfNzlbWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2QzXzc5X3Njb3JlZF83OV9sZWcgPC0gZ2V0X2xlZ2VuZCgKICBwbG90c19kM183OV9zY29yZWRfNzlbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90cywgZmlnX2QzXzc5X3Njb3JlZF83OV9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM183OV9zY29yZWRfNzlfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNy05eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMpIiwgc2l6ZSA9IDE2LCBmb250ZmFjZSA9ICdib2xkJywgeCA9IDAsIGhqdXN0ID0gMCkKCmZpZ19kM183OV9zY29yZWRfNzlfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNzlfc2NvcmVkXzc5X3RpdGxlLCBmaWdfZDNfNzlfc2NvcmVkXzc5X3Bsb3RzX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDAuMTIsIDEpKQpgYGAKCiMjIyMgQW5hbHlzaXMgb2YgYXN5bW1ldHJpZXMKCmBgYHtyfQpkM183OV9zY29yZWRfNzlfZGlmZiA8LSBkaWZmX2Z1bihkM183OV9zY29yZWRfNzkpCnNhdmVSRFMoZDNfNzlfc2NvcmVkXzc5X2RpZmYsICIuL3N0b3JlZC9kaWZmc2NvcmVfZGF0YS9kM183OV9zY29yZWRfNzlfZGlmZiIpCmBgYAoKYGBge3J9CnBsb3RfZDNfNzlfc2NvcmVkXzc5X2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzc5X3Njb3JlZF83OV9kaWZmLCBjb2xvcnMwOSkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfSEVBUlQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM183OV9zY29yZWRfNzlfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM183OV9zY29yZWRfNzlfZGlmZl9CT0RZX01JTkQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfQk9EWV9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzc5X3Njb3JlZF83OV9kaWZmX0JPRFlfTUlORCkKYGBgCgpgYGB7cn0KIyByX2QzXzc5X3Njb3JlZF83OV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKICBkaWZmIH4gMSArIGNoYXJhY3RlciwKICBkYXRhID0gZDNfNzlfc2NvcmVkXzc5X2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzc5X3Njb3JlZF83OV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDNfNzlfc2NvcmVkXzc5X2RpZmZfSEVBUlRfTUlORCkKYGBgCgojIyMgWW91bmdlciBjaGlsZHJlbiwgdXNpbmcgdGhlaXIgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKWFggc3VnZ2VzdGVkIGJ5IFdETQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3dkbV9kM180NiA8LSBzY2FsZV9mdW4oZWZhX3dkbV9kM180NiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpCmQzXzQ2X3Njb3JlZF80Nl93ZG0gPC0gc2NvcmVfZnVuKGQzXzQ2LCBzY2FsZXNfZWZhX3dkbV9kM180NikKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kM180NiwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV93ZG1fZDNfNDYiKQpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl93ZG0sIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbSIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV93ZG1fZDNfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4zLgoKIyMjIyBWaXN1YWxpemF0aW9uCgpgYGB7cn0KcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbSA8LSByZWx2aXpfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG0sIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kM180Nl9zY29yZWRfNDZfd2RtW1syXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl93ZG1bWzNdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQjEiLCAiQjIiLCAiQjMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAzKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczA5LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSArCiAgICBzY2FsZV9jb2xvcl9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDkpKSkKCmZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMsIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl93ZG1fdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSAzOiBDaGlsZHJlbiwgNC02eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3RpdGxlLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIDwtIGRpZmZfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG0pCnNhdmVSRFMoZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzMDkpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBIRUFSVCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfSEVBUlQgPC0gbG0oCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIsCiAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gSEVBUlQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX0hFQVJUIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBIRUFSVCoiKSkKCnN1bW1hcnkocl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSogLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWV9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZKiAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgojIHJfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlfTUlORCA8LSBsbSgKIyAgIGRpZmYgfiAxLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkqIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kM180Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSkpCgpyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2R2MDkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtKAojICAgZGlmZiB+IDEsCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQqIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EKQpgYGAKCiMjIyBZb3VuZ2VyIGNoaWxkcmVuLCB1c2luZyB0aGVpciBvd24gc2NhbGVzICh0d28tZmFjdG9yIHNvbHV0aW9uKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KClhYIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcwoKYGBge3J9CnNjYWxlc19lZmFfcGFyX2QzXzQ2IDwtIHNjYWxlX2Z1bihlZmFfcGFyX2QzXzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2VmYV9wYXJfZDNfNDYpCmQzXzQ2X3Njb3JlZF80Nl9wYXIgPC0gc2NvcmVfZnVuKGQzXzQ2LCBzY2FsZXNfZWZhX3Bhcl9kM180NikKc2F2ZVJEUyhzY2FsZXNfZWZhX3dkbV9kM180NiwgZmlsZSA9ICIuL3N0b3JlZC9zY2FsZXMvc2NhbGVzX2VmYV9wYXJfZDNfNDYiKQpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl9wYXIsIGZpbGUgPSAiLi9zdG9yZWQvc2NvcmVkX2RhdGEvZDNfNDZfc2NvcmVkXzQ2X3BhciIpCmBgYAoKRm9sbG93aW5nIHRoZSBzdGVwcyBkZXNjcmliZWQgaW4gIkdlbmVyYWwgYW5hbHlzaXMgcGxhbiwiIGFib3ZlLCB5aWVsZGVkIGByIGZhY3RfbmFtZV9mdW4oZmFjdG9yX25hbWVzX2VmYV9wYXJfZDNfNDYpYCBzY2FsZXMgb2YgYHIgc2NhbGVzX2VmYV9wYXJfZDNfNDYgJT4lIGNvdW50KGZhY3RvcikgJT4lIHN1bW1hcmlzZShtZWFuID0gbWVhbihuKSkgJT4lIHNlbGVjdChtZWFuKSAlPiUgYXMubnVtZXJpYygpYCBpdGVtcyBlYWNoOyBzZWUgVGFibGUgNC4zLgoKIyMjIyBWaXN1YWxpemF0aW9uCgpgYGB7cn0KcGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhciA8LSByZWx2aXpfZnVuKGQzXzQ2X3Njb3JlZF80Nl9wYXIsIGNvbG9ycyA9IGNvbG9yczA5KQpgYGAKCmBgYHtyfQpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90cyA8LSBwbG90X2dyaWQocGxvdHNfZDNfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJDMSIpLCBuY29sID0gMykKCmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX2xlZyA8LSBnZXRfbGVnZW5kKAogIHBsb3RzX2QzXzQ2X3Njb3JlZF80Nl9wYXJbWzFdXSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgKwogICAgc2NhbGVfZmlsbF9tYW51YWwoIlRhcmdldCBjaGFyYWN0ZXIiLCB2YWx1ZXMgPSBjb2xvcnMwOSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKCJUYXJnZXQgY2hhcmFjdGVyIiwgdmFsdWVzID0gY29sb3JzMDksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSA5KSkpCgpmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWcgPC0gcGxvdF9ncmlkKAogIGZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3Bsb3RzLCBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjA1KSkKCmZpZ19kM180Nl9zY29yZWRfNDZfcGFyX3RpdGxlIDwtIGdnZHJhdygpICsgCiAgZHJhd19sYWJlbCgiU3R1ZHkgMzogQ2hpbGRyZW4sIDQtNnkgKHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzLCAyLWZhY3RvciBzb2x1dGlvbikiLCBzaXplID0gMTYsIGZvbnRmYWNlID0gJ2JvbGQnLCB4ID0gMCwgaGp1c3QgPSAwKQoKZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnX3RpdGxlIDwtIHBsb3RfZ3JpZCgKICBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl90aXRsZSwgZmlnX2QzXzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHNfbGVnLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMC4xMiwgMSkpCmBgYAoKIyMjIyBBbmFseXNpcyBvZiBhc3ltbWV0cmllcwoKYGBge3J9CmQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiA8LSBkaWZmX2Z1bihkM180Nl9zY29yZWRfNDZfcGFyKQpzYXZlUkRTKGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgIi4vc3RvcmVkL2RpZmZzY29yZV9kYXRhL2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiIpCmBgYAoKYGBge3J9CnBsb3RfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZwbG90X2Z1bihkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYsIGNvbG9yczA5KQpgYGAKCmBgYHtyfQojIHJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpLAojICAgZGF0YSA9IGQzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFktSEVBUlQgLSBNSU5EIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZHYwOSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlciksCiMgICBkYXRhID0gZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWS1IRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCnJfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlIRUFSVF9NSU5EIDwtIGxtKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyLAogIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZLUhFQVJUIC0gTUlORCIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9kdjA5KSkKCiMgcl9kM180Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWUhFQVJUX01JTkQgPC0gbG0oCiMgICBkaWZmIH4gMSwKIyAgIGRhdGEgPSBkM180Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZLUhFQVJUIC0gTUlORCIpKQoKc3VtbWFyeShyX2QzXzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZSEVBUlRfTUlORCkKYGBgCgojIyMgRGlzY3Vzc2lvbgoKYGBge3J9CnNjYWxlc19zdHVkeTMgPC0gYmluZF9yb3dzKHNjYWxlc19lZmFfd2RtX2QzX2FkICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3R1ZHkgPSAiQWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlc19lZmFfd2RtX2QzXzc5ICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3R1ZHkgPSAiT2xkZXIgY2hpbGRyZW4sIDctOXkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV93ZG1fZDNfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN0dWR5ID0gIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXNfZWZhX3Bhcl9kM180NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3R1ZHkgPSAiWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMi1mYWN0b3Igc29sdXRpb24pIikpICU+JQogIHNlbGVjdCgtYyhsb2FkaW5nLCBvcmRlcikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gZmFjdG9yKHN0dWR5LAogICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJBZHVsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbGRlciBjaGlsZHJlbiwgNy05eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDItZmFjdG9yIHNvbHV0aW9uKSIpKSkgJT4lCiAgc3ByZWFkKHN0dWR5LCBmYWN0b3IpICU+JQogIG11dGF0ZSh1cl9mYWN0b3IgPSBpZmVsc2UoIWlzLm5hKGBBZHVsdHNgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQWR1bHRzYCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoIWlzLm5hKGBPbGRlciBjaGlsZHJlbiwgNy05eWApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT2xkZXIgY2hpbGRyZW4sIDctOXlgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShpcy5uYShgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWW91bmdlciBjaGlsZHJlbiwgNC02eSAoMy1mYWN0b3Igc29sdXRpb24pYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDItZmFjdG9yIHNvbHV0aW9uKWApKSkpICU+JQogIGxlZnRfam9pbihzY2FsZXNfZWZhX3dkbV9kM19hZCAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcikgJT4lIHJlbmFtZShvcmRlcl9hZCA9IG9yZGVyKSkgJT4lCiAgbGVmdF9qb2luKHNjYWxlc19lZmFfd2RtX2QzXzc5ICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSAlPiUgcmVuYW1lKG9yZGVyXzc5ID0gb3JkZXIpKSAlPiUKICBhcnJhbmdlKHVyX2ZhY3Rvciwgb3JkZXJfYWQsIG9yZGVyXzc5KSAlPiUKICBzZWxlY3QoLWModXJfZmFjdG9yLCBzdGFydHNfd2l0aCgib3JkZXIiKSkpCmBgYAoKYGBge3J9CnRhYmxlNC4zIDwtIHNjYWxlc19zdHVkeTMgJT4lCiAgbXV0YXRlX2FsbChhcy5jaGFyYWN0ZXIpICU+JQogICMgZGVhbCB3aXRoIHlvdW5nZXIgY2hpbGRyZW4sIDItZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDItZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfCAKICAgICAgICAgICAgIHRlbXAyID09IGBPbGRlciBjaGlsZHJlbiwgNy05eWAgfiAi4pyTIiwKICAgICAgICAgICBpcy5uYSh0ZW1wMikgfiAiIiwKICAgICAgICAgICBUUlVFIH4gdGVtcDEpKSAlPiUKICBtdXRhdGUoYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDItZmFjdG9yIHNvbHV0aW9uKWAgPSB0ZW1wMykgJT4lCiAgc2VsZWN0KC1zdGFydHNfd2l0aCgidGVtcCIpKSAlPiUKICAjIGRlYWwgd2l0aCB5b3VuZ2VyIGNoaWxkcmVuLCAzLWZhY3RvciBzb2x1dGlvbgogIG11dGF0ZSh0ZW1wMSA9IGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICB0ZW1wMiA9IGdzdWIoIlxcKiIsICIiLCB0ZW1wMSksCiAgICAgICAgIHRlbXAzID0gY2FzZV93aGVuKAogICAgICAgICAgIHRlbXAyID09IGBBZHVsdHNgIHwgCiAgICAgICAgICAgICB0ZW1wMiA9PSBgT2xkZXIgY2hpbGRyZW4sIDctOXlgIHwKICAgICAgICAgICAgIChpcy5uYShgQWR1bHRzYCkgJiBpcy5uYShgT2xkZXIgY2hpbGRyZW4sIDctOXlgKSkgfiAi4pyTIiwKICAgICAgICAgICBpcy5uYSh0ZW1wMikgfiAiIiwKICAgICAgICAgICBUUlVFIH4gdGVtcDEpKSAlPiUKICBtdXRhdGUoYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDMtZmFjdG9yIHNvbHV0aW9uKWAgPSB0ZW1wMykgJT4lCiAgc2VsZWN0KC1zdGFydHNfd2l0aCgidGVtcCIpKSAlPiUKICBtdXRhdGVfYXQodmFycyhgQWR1bHRzYCwgYE9sZGVyIGNoaWxkcmVuLCA3LTl5YCksCiAgICAgICAgICAgIGZ1bnMoaWZlbHNlKGlzLm5hKC4pLCAiIiwgIuKckyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIllvdW5nZXIiKSksCiAgICAgICAgICAgIGZ1bnMoaWZlbHNlKGlzLm5hKC4pLCAiIiwgLikpKSAlPiUKICByZW5hbWUoQ2FwYWNpdHkgPSBjYXBhY2l0eSwKICAgICAgICAgYDMtZmFjdG9yIHNvbHV0aW9uYCA9IGBZb3VuZ2VyIGNoaWxkcmVuLCA0LTZ5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICBgMi1mYWN0b3Igc29sdXRpb25gID0gYFlvdW5nZXIgY2hpbGRyZW4sIDQtNnkgKDItZmFjdG9yIHNvbHV0aW9uKWApICU+JQogIGthYmxlKGZvcm1hdCA9ICJodG1sIiwKICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDQuMzogU2NhbGVzIGZvciBlYWNoIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIChmYWN0b3JzKSBpZGVudGlmaWVkIGJ5IEVGQSBmb3IgVVMgQWR1bHRzLCBvbGRlciBjaGlsZHJlbiwgYW5kIHlvdW5nZXIgY2hpbGRyZW4gaW4gU3R1ZHkgMyAoc2VlIENoYXB0ZXIgSUlJKS4gRm9yIHlvdW5nZXIgY2hpbGRyZW4sIHRoaXMgaW5jbHVkZXMgc2NhbGVzIGZvciBib3RoIHRocmVlLSBhbmQgdHdvLWZhY3RvciBFRkEgc29sdXRpb25zLiBBIGNoZWNrbWFyayBpbmRpY2F0ZXMgdGhhdCBhIG1lbnRhbCBjYXBhY2l0eSB3YXMgaW5jbHVkZWQgaW4gYSBzY2FsZSBmb3IgYSBwYXJ0aWN1bGFyIHNhbXBsZS4gVGhlIGNvbmNlcHR1YWwgdW5pdHMgb2YgeW91bmdlciBjaGlsZHJlbiBkaWZmZXJlZCBzdWJzdGFudGlhbGx5IGZyb20gdGhvc2Ugb2Ygb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cywgc3VjaCB0aGF0IHNvbWUgbWVudGFsIGNhcGFjaXRpZXMgd2VyZSBpbmNsdWRlZCBpbiBkaWZmZXJlbnQgc2NhbGVzIGFjcm9zcyBhZ2UgZ3JvdXBzIChlLmcuLCBmZWVsIHNjYXJlZCB3YXMgcGFydCBvZiB0aGUgQk9EWSBzY2FsZSBmb3Igb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cywgYnV0IHBhcnQgb2YgdGhlIEhFQVJUKiBzY2FsZSBmb3IgeW91bmdlciBjaGlsZHJlbikuIEluIHRoZXNlIGNhc2VzLCB0aGUgbmFtZSBvZiB0aGUgc2NhbGUgaXMgcHJvdmlkZWQgKHJhdGhlciB0aGFuIGEgY2hlY2ttYXJrKS4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQk9EWSBzY2FsZSIsIDEsIDcpICU+JQogIGdyb3VwX3Jvd3MoIkhFQVJUIHNjYWxlIiwgOCwgMTQpICU+JQogIGdyb3VwX3Jvd3MoIk1JTkQgc2NhbGUiLCAxNSwgMjApICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAzLAogICAgICAgICAgICAgICAgICAgICAiWW91bmdlciBjaGlsZHJlbiwgNC02eSIgPSAyKSkKYGBgCgpgYGB7ciB0YWJsZTQuMywgaW5jbHVkZSA9IFR9CnRhYmxlNC4zCmBgYAoKYGBge3J9CmZpZ3VyZTQuOSA8LSBwbG90X2dyaWQoZmlnX2QzXzc5X3Njb3JlZF83OV9wbG90c19sZWdfdGl0bGUsIAogICAgICAgICAgICAgICAgICAgICAgIGZpZ19kM180Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICBmaWdfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWdfdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEpCgpmaWd1cmU0LjlfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC45LCBzdHJfd3JhcCgiRmlndXJlIDQuOTogUmVsYXRpb25zaGlwcyBhbW9uZyBvbGRlciBhbmQgeW91bmdlciBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDMsIHNjb3JlZCB1c2luZyB0aGVpciBvd24gc2NhbGVzIChzZWUgVGFibGUgNC4zKS4gRm9yIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkgb2YgYWdlKSwgdHdvIHNldHMgb2Ygc2NvcmVzIGFyZSBwcmVzZW50ZWQ6IHVzaW5nIGEgdGhyZWUtZmFjdG9yIEVGQSBzb2x1dGlvbiAoQjEtQjMpIGFuZCB1c2luZyBhIHR3by1mYWN0b3IgRUZBIHNvbHV0aW9uIChDMS1DMykuIFBsb3RzIGFyZSBvcmdhbml6ZWQgYnkgc2FtcGxlIGFuZCBzY2FsZSB1c2VkIChyb3dzKSBhbmQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjR9CmdnZHJhdyhmaWd1cmU0LjlfY2FwKQpgYGAKCmBgYHtyfQpmaWd1cmU0LjExX3Bsb3RzIDwtIHBsb3RfZ3JpZCgKICBwbG90X2QzXzc5X3Njb3JlZF83OV9kaWZmICsKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgMzogQ2hpbGRyZW4sIDctOXlcbihzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcykiKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogIHBsb3RfZDNfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDM6IENoaWxkcmVuLCA0LTZ5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIHBsb3RfZDNfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDM6IENoaWxkcmVuLCA0LTZ5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDItZmFjdG9yIHNvbHV0aW9uKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogIG5jb2wgPSAzLCByZWxfd2lkdGhzID0gYygxLCAxLCAwLjgpLAogIGxhYmVscyA9ICJBVVRPIikKCmZpZ3VyZTQuMTFfcGxvdHNfbGVnIDwtIHBsb3RfZ3JpZChmaWd1cmU0LjExX3Bsb3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2xlZ2VuZChwbG90X2QzXzc5X3Njb3JlZF83OV9kaWZmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKCmZpZ3VyZTQuMTFfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC4xMV9wbG90c19sZWcsIHN0cl93cmFwKCJGaWd1cmUgNC4xMTogRGlmZmVyZW5jZSBzY29yZXMgYmV0d2VlbiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3MgYW5kIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgY29uY2VwdHVhbCB1bml0cyBpbiBTdHVkeSAzLCB1c2luZyB0aGVpciBvd24gc2NhbGVzLiBGb3IgeW91bmdlciBjaGlsZHJlbiAoNC02eSBvZiBhZ2UpLCB0aGlzIGluY2x1ZGVzIGRpZmZlcmVuY2Ugc2NvcmVzIHVzaW5nIHRoZSB0aHJlZS1mYWN0b3IgRUZBIHNvbHV0aW9uIChwYW5lbCBCKSBhbmQgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIHR3by1mYWN0b3Igc29sdXRpb24gKHBhbmVsIEM7IHNlZSBUYWJsZSA0LjMpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZTQuMTFfY2FwKQpgYGAKCiMjIFN0dWR5IDQKCiMjIyBDaGlsZHJlbiwgdXNpbmcgdGhlaXIgb3duIHNjYWxlcyAodGhyZWUtZmFjdG9yIHNvbHV0aW9uKQoKIyMjIyBTY2FsZSBjb25zdHJ1Y3Rpb24KCmBgYHtyfQpzY2FsZXNfZWZhX3Bhcl9kNF80NiA8LSBzY2FsZV9mdW4oZWZhX3Bhcl9kNF80NiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2KQpkNF80Nl9zY29yZWRfNDZfcGFyIDwtIHNjb3JlX2Z1bihkNF80Niwgc2NhbGVzX2VmYV9wYXJfZDRfNDYpCnNhdmVSRFMoc2NhbGVzX2VmYV9wYXJfZDRfNDYsIGZpbGUgPSAiLi9zdG9yZWQvc2NhbGVzL3NjYWxlc19lZmFfcGFyX2Q0XzQ2IikKc2F2ZVJEUyhkNF80Nl9zY29yZWRfNDZfcGFyLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2Q0XzQ2X3Njb3JlZF80Nl9wYXIiKQpgYGAKCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2KWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfcGFyX2Q0XzQ2ICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuNC4KCiMjIyMgVmlzdWFsaXphdGlvbgoKYGBge3J9CnBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXIgPC0gcmVsdml6X2Z1bihkNF80Nl9zY29yZWRfNDZfcGFyLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl9wYXJbWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhcltbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfNDZfcGFyW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkExIiwgIkEyIiwgIkEzIiksIG5jb2wgPSAzKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3BhcltbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHRpdGxlLnBvc2l0aW9uID0gImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSkKCmZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZyA8LSBwbG90X2dyaWQoCiAgZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfcGxvdHMsIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX2xlZywKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSA0OiBDaGlsZHJlbiwgNC01eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3RpdGxlLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIDwtIGRpZmZfZnVuKGQ0XzQ2X3Njb3JlZF80Nl9wYXIpCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgLSBIRUFSVCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9IRUFSVCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gSEVBUlQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIEhFQVJUIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGJybSgKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfQk9EWV9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0JPRFlfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIC0gTUlORCIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZl9CT0RZX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl9wYXJfZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUIC0gTUlORCIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfcGFyX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKICBkaWZmIH4gMSArIGNoYXJhY3RlciArICgxIHwgc3ViaWQpLAogIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfcGFyX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCAtIE1JTkQiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiSEVBUlQgLSBNSU5EIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmX0hFQVJUX01JTkQpCmBgYAoKIyMjIENoaWxkcmVuLCB1c2luZyB0aGVpciBvd24gc2NhbGVzIChmb3VyLWZhY3RvciBzb2x1dGlvbikKCiMjIyMgU2NhbGUgY29uc3RydWN0aW9uCgpgYGB7cn0Kc2NhbGVzX2VmYV93ZG1fZDRfNDYgPC0gc2NhbGVfZnVuKGVmYV93ZG1fZDRfNDYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2KQpkNF80Nl9zY29yZWRfNDZfd2RtIDwtIHNjb3JlX2Z1bihkNF80Niwgc2NhbGVzX2VmYV93ZG1fZDRfNDYpCnNhdmVSRFMoc2NhbGVzX2VmYV93ZG1fZDRfNDYsIGZpbGUgPSAiLi9zdG9yZWQvc2NhbGVzL3NjYWxlc19lZmFfd2RtX2Q0XzQ2IikKc2F2ZVJEUyhkNF80Nl9zY29yZWRfNDZfd2RtLCBmaWxlID0gIi4vc3RvcmVkL3Njb3JlZF9kYXRhL2Q0XzQ2X3Njb3JlZF80Nl93ZG0iKQpgYGAKCkZvbGxvd2luZyB0aGUgc3RlcHMgZGVzY3JpYmVkIGluICJHZW5lcmFsIGFuYWx5c2lzIHBsYW4sIiBhYm92ZSwgeWllbGRlZCBgciBmYWN0X25hbWVfZnVuKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2KWAgc2NhbGVzIG9mIGByIHNjYWxlc19lZmFfd2RtX2Q0XzQ2ICU+JSBjb3VudChmYWN0b3IpICU+JSBzdW1tYXJpc2UobWVhbiA9IG1lYW4obikpICU+JSBzZWxlY3QobWVhbikgJT4lIGFzLm51bWVyaWMoKWAgaXRlbXMgZWFjaDsgc2VlIFRhYmxlIDQuNC4KCiMjIyMgVmlzdWFsaXphdGlvbgoKYGBge3J9CnBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG0gPC0gcmVsdml6X2Z1bihkNF80Nl9zY29yZWRfNDZfd2RtLCBjb2xvcnMgPSBjb2xvcnMwMikKYGBgCgpgYGB7cn0KZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fcGxvdHMgPC0gcGxvdF9ncmlkKHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzFdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbMl1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1szXV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzX2Q0XzQ2X3Njb3JlZF80Nl93ZG1bWzRdXSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbNV1dICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90c19kNF80Nl9zY29yZWRfNDZfd2RtW1s2XV0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkIxIiwgIkIyIiwgIkIzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCNCIsICJCNSIsICJCNiIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAzKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fbGVnIDwtIGdldF9sZWdlbmQoCiAgcGxvdHNfZDRfNDZfc2NvcmVkXzQ2X3dkbVtbMV1dICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsIHZhbHVlcyA9IGNvbG9yczAyLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMikpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCgiVGFyZ2V0IGNoYXJhY3RlciIsCiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gY29sb3JzMDIsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkpCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcgPC0gcGxvdF9ncmlkKGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX2xlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMDUpKQoKZmlnX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fdGl0bGUgPC0gZ2dkcmF3KCkgKyAKICBkcmF3X2xhYmVsKCJTdHVkeSA0OiBDaGlsZHJlbiwgNC01eSAoc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDQtZmFjdG9yIHNvbHV0aW9uKSIsIHNpemUgPSAxNiwgZm9udGZhY2UgPSAnYm9sZCcsIHggPSAwLCBoanVzdCA9IDApCgpmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWdfdGl0bGUgPC0gcGxvdF9ncmlkKAogIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3RpdGxlLCBmaWdfZDRfNDZfc2NvcmVkXzQ2X3dkbV9wbG90c19sZWcsCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygwLjEyLCAxKSkKYGBgCgojIyMjIEFuYWx5c2lzIG9mIGFzeW1tZXRyaWVzCgpgYGB7cn0KZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIDwtIGRpZmZfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG0pCnNhdmVSRFMoZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmLCAiLi9zdG9yZWQvZGlmZnNjb3JlX2RhdGEvZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmIikKYGBgCgpgYGB7cn0KcGxvdF9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgPC0gZGlmZnBsb3RfZnVuKGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiwgY29sb3JzMDIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSksCiMgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OTkpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gQk9EWSAob3RoZXIpIiksCiMgICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgpyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0JPRFlvdGhlciA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBCT0RZIChvdGhlcikiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfQk9EWW90aGVyIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBCT0RZIChvdGhlcikiKSkKCnN1bW1hcnkocl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9CT0RZb3RoZXIpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9IRUFSVCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBIRUFSVCoiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAobmF1c2VhKSAtIEhFQVJUKiIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCA8LSBicm0oCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgY2hhcmFjdGVyKSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIEhFQVJUKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX0hFQVJUIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gSEVBUlQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZb3RoZXJfSEVBUlQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gSEVBUlQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSwKIyAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5OSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChuYXVzZWEpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFluYXVzZWFfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBNSU5EKiIpLAogIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW5hdXNlYV9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG5hdXNlYSkgLSBNSU5EKiIpKQoKc3VtbWFyeShyX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9CT0RZbmF1c2VhX01JTkQpCmBgYAoKYGBge3J9CiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJCT0RZIChvdGhlcikgLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfQk9EWW90aGVyX01JTkQgPC0gbG1lcigKIyAgIGRpZmYgfiAxICsgKDEgfCBjaGFyYWN0ZXIpICsgKDEgfCBzdWJpZCksCiMgICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKIyAgIGNvbnRyYXN0cyA9IGxpc3QoY2hhcmFjdGVyID0gY29udHJhc3RzX3N1bV9lZGdlKSkKCnJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIGxtZXIoCiAgZGlmZiB+IDEgKyBjaGFyYWN0ZXIgKyAoMSB8IHN1YmlkKSwKICBkYXRhID0gZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmICU+JSBmaWx0ZXIocGFpciA9PSAiQk9EWSAob3RoZXIpIC0gTUlORCoiKSwKICBjb250cmFzdHMgPSBsaXN0KGNoYXJhY3RlciA9IGNvbnRyYXN0c19zdW1fZWRnZSkpCgojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkJPRFkgKG90aGVyKSAtIE1JTkQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0JPRFlvdGhlcl9NSU5EKQpgYGAKCmBgYHtyfQojIHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQgPC0gYnJtKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpLAojICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTk5KSkKCiMgcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAojICAgZGlmZiB+IDEgKyAoMSB8IGNoYXJhY3RlcikgKyAoMSB8IHN1YmlkKSwKIyAgIGRhdGEgPSBkNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgJT4lIGZpbHRlcihwYWlyID09ICJIRUFSVCogLSBNSU5EKiIpLAojICAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKcl9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmZfSEVBUlRfTUlORCA8LSBsbWVyKAogIGRpZmYgfiAxICsgY2hhcmFjdGVyICsgKDEgfCBzdWJpZCksCiAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQqIiksCiAgY29udHJhc3RzID0gbGlzdChjaGFyYWN0ZXIgPSBjb250cmFzdHNfc3VtX2VkZ2UpKQoKIyByX2Q0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZl9IRUFSVF9NSU5EIDwtIGxtZXIoCiMgICBkaWZmIH4gMSArICgxIHwgc3ViaWQpLAojICAgZGF0YSA9IGQ0XzQ2X3Njb3JlZF80Nl93ZG1fZGlmZiAlPiUgZmlsdGVyKHBhaXIgPT0gIkhFQVJUKiAtIE1JTkQqIikpCgpzdW1tYXJ5KHJfZDRfNDZfc2NvcmVkXzQ2X3dkbV9kaWZmX0hFQVJUX01JTkQpCmBgYAoKCiMjIyBEaXNjdXNzaW9uCgpgYGB7cn0Kc2NhbGVzX3N0dWR5NCA8LSBiaW5kX3Jvd3Moc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdHVkeSA9ICJBZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV9wYXJfZDRfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN0dWR5ID0gIkNoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVzX2VmYV93ZG1fZDRfNDYgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN0dWR5ID0gIkNoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbikiKSkgJT4lCiAgc2VsZWN0KC1jKGxvYWRpbmcsIG9yZGVyKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHksCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFkdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGlsZHJlbiwgNC01eSAoNC1mYWN0b3Igc29sdXRpb24pIikpKSAlPiUKICBzcHJlYWQoc3R1ZHksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9IGlmZWxzZSghaXMubmEoYEFkdWx0c2ApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBZHVsdHNgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGBDaGlsZHJlbiwgNC01eSAoMy1mYWN0b3Igc29sdXRpb24pYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBDaGlsZHJlbiwgNC01eSAoNC1mYWN0b3Igc29sdXRpb24pYCkpKSAlPiUKICBsZWZ0X2pvaW4oc2NhbGVzX2VmYV93ZG1fZDRfYWQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChjYXBhY2l0eSwgb3JkZXIpICU+JSByZW5hbWUob3JkZXJfYWQgPSBvcmRlcikpICU+JQogIGFycmFuZ2UodXJfZmFjdG9yLCBvcmRlcl9hZCkgJT4lCiAgc2VsZWN0KC1jKHVyX2ZhY3Rvciwgc3RhcnRzX3dpdGgoIm9yZGVyIikpKQpgYGAKCmBgYHtyfQp0YWJsZTQuNCA8LSBzY2FsZXNfc3R1ZHk0ICU+JQogIG11dGF0ZV9hbGwoYXMuY2hhcmFjdGVyKSAlPiUKICAjIGRlYWwgd2l0aCBDaGlsZHJlbiwgNC1mYWN0b3Igc29sdXRpb24KICBtdXRhdGUodGVtcDEgPSBgQ2hpbGRyZW4sIDQtNXkgKDQtZmFjdG9yIHNvbHV0aW9uKWAsCiAgICAgICAgIHRlbXAyID0gZ3N1YigiXFwqIiwgIiIsIHRlbXAxKSwKICAgICAgICAgdGVtcDMgPSBjYXNlX3doZW4oCiAgICAgICAgICAgdGVtcDIgPT0gYEFkdWx0c2AgfiAi4pyTIiwKICAgICAgICAgICBpcy5uYSh0ZW1wMikgfiAiIiwKICAgICAgICAgICBUUlVFIH4gdGVtcDEpKSAlPiUKICBtdXRhdGUoYENoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbilgID0gdGVtcDMpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoInRlbXAiKSkgJT4lCiAgIyBkZWFsIHdpdGggQ2hpbGRyZW4sIDMtZmFjdG9yIHNvbHV0aW9uCiAgbXV0YXRlKHRlbXAxID0gYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICB0ZW1wMiA9IGdzdWIoIlxcKiIsICIiLCB0ZW1wMSksCiAgICAgICAgIHRlbXAzID0gY2FzZV93aGVuKAogICAgICAgICAgIHRlbXAyID09IGBBZHVsdHNgIH4gIuKckyIsCiAgICAgICAgICAgaXMubmEodGVtcDIpIH4gIiIsCiAgICAgICAgICAgVFJVRSB+IHRlbXAxKSkgJT4lCiAgbXV0YXRlKGBDaGlsZHJlbiwgNC01eSAoMy1mYWN0b3Igc29sdXRpb24pYCA9IHRlbXAzKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0ZW1wIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGBBZHVsdHNgKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAi4pyTIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiWW91bmdlciIpKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoaXMubmEoLiksICIiLCAuKSkpICU+JQogIHJlbmFtZShDYXBhY2l0eSA9IGNhcGFjaXR5LAogICAgICAgICBgMy1mYWN0b3Igc29sdXRpb25gID0gYENoaWxkcmVuLCA0LTV5ICgzLWZhY3RvciBzb2x1dGlvbilgLAogICAgICAgICBgNC1mYWN0b3Igc29sdXRpb25gID0gYENoaWxkcmVuLCA0LTV5ICg0LWZhY3RvciBzb2x1dGlvbilgKSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA0LjQ6IFNjYWxlcyBmb3IgZWFjaCBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyAoZmFjdG9ycykgaWRlbnRpZmllZCBieSBFRkEgZm9yIFVTIEFkdWx0cyBhbmQgY2hpbGRyZW4gaW4gU3R1ZHkgNCAoc2VlIENoYXB0ZXIgSUlJKS4gRm9yIGNoaWxkcmVuLCB0aGlzIGluY2x1ZGVzIHNjYWxlcyBmb3IgYm90aCB0aHJlZS0gYW5kIGZvdXItZmFjdG9yIEVGQSBzb2x1dGlvbnMuIEEgY2hlY2ttYXJrIGluZGljYXRlcyB0aGF0IGEgbWVudGFsIGNhcGFjaXR5IHdhcyBpbmNsdWRlZCBpbiBhIHNjYWxlIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlLiBUaGUgY29uY2VwdHVhbCB1bml0cyBvZiB5b3VuZ2VyIGNoaWxkcmVuIGRpZmZlcmVkIHN1YnN0YW50aWFsbHkgZnJvbSB0aG9zZSBvZiBhZHVsdHMsIHN1Y2ggdGhhdCBzb21lIG1lbnRhbCBjYXBhY2l0aWVzIHdlcmUgaW5jbHVkZWQgaW4gZGlmZmVyZW50IHNjYWxlcyBhY3Jvc3MgYWdlIGdyb3VwcyAoZS5nLiwgbG92ZSBzb21lb25lIHdhcyBwYXJ0IG9mIHRoZSBIRUFSVCBzY2FsZSBmb3IgYWR1bHRzLCBidXQgcGFydCBvZiB0aGUgTUlORCogc2NhbGUgaW4gdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIGZvciB5b3VuZ2VyIGNoaWxkcmVuKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBuYW1lIG9mIHRoZSBzY2FsZSBpcyBwcm92aWRlZCAocmF0aGVyIHRoYW4gYSBjaGVja21hcmspLiIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJCT0RZIHNjYWxlIiwgMSwgNSkgJT4lCiAgZ3JvdXBfcm93cygiSEVBUlQgc2NhbGUiLCA2LCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiTUlORCBzY2FsZSIsIDExLCAxNSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDIsCiAgICAgICAgICAgICAgICAgICAgICJDaGlsZHJlbiwgNC01eSIgPSAyKSkKYGBgCgpgYGB7ciB0YWJsZTQuNCwgaW5jbHVkZSA9IFR9CnRhYmxlNC40CmBgYAoKYGBge3J9CmZpZ3VyZTQuMTMgPC0gcGxvdF9ncmlkKGZpZ19kNF80Nl9zY29yZWRfNDZfcGFyX3Bsb3RzX2xlZ190aXRsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ19kNF80Nl9zY29yZWRfNDZfd2RtX3Bsb3RzX2xlZ190aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAyKSkKCmZpZ3VyZTQuMTNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNC4xMywgc3RyX3dyYXAoIkZpZ3VyZSA0LjEzOiBSZWxhdGlvbnNoaXBzIGFtb25nIFVTIGFkdWx0cycsIG9sZGVyIGNoaWxkcmVuJ3MsIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIGNvbmNlcHR1YWwgdW5pdHMgaW4gU3R1ZHkgMywgc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMgc2NhbGVzIChzZWUgVGFibGUgNC40KS4gVHR3byBzZXRzIG9mIHNjb3JlcyBhcmUgcHJlc2VudGVkOiB1c2luZyBhIHRocmVlLWZhY3RvciBFRkEgc29sdXRpb24gKEExLUEzKSBhbmQgdXNpbmcgYSBmb3VyLWZhY3RvciBFRkEgc29sdXRpb24gKEIxLUI2KS4gUGxvdHMgYXJlIG9yZ2FuaXplZCBieSBzY2FsZSB1c2VkIChyb3dzKSBhbmQgYnkgcGFpciBvZiBjb25jZXB0dWFsIHVuaXRzIChjb2x1bW5zKS4gRm9yIGVhY2ggY29uY2VwdHVhbCB1bml0LCBzY29yZXMgY291bGQgcmFuZ2UgZnJvbSAwLTEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIFRoZSBkb3R0ZWQgbGluZSBjb3JyZXNwb25kcyB0byBlcXVhbCBlbmRvcnNlbWVudHMgb2YgdGhlIHR3byBjb25jZXB0dWFsIHVuaXRzIHBsb3R0ZWQuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjM1fQpnZ2RyYXcoZmlndXJlNC4xM19jYXApCmBgYAoKYGBge3J9CmZpZ3VyZTQuMTVfcGxvdHMgPC0gcGxvdF9ncmlkKAogIHBsb3RfZDRfNDZfc2NvcmVkXzQ2X3Bhcl9kaWZmICsgCiAgICBsYWJzKHRpdGxlID0gIlN0dWR5IDQ6IENoaWxkcmVuLCA0LTZ5XG4oc2NvcmVkIHVzaW5nIHRoZWlyIG93biBzY2FsZXMsIDMtZmFjdG9yIHNvbHV0aW9uKSIpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSwgCiAgcGxvdF9kNF80Nl9zY29yZWRfNDZfd2RtX2RpZmYgKyAKICAgIGxhYnModGl0bGUgPSAiU3R1ZHkgNDogQ2hpbGRyZW4sIDQtNnlcbihzY29yZWQgdXNpbmcgdGhlaXIgb3duIHNjYWxlcywgNC1mYWN0b3Igc29sdXRpb24pIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpLCAKICBuY29sID0gMiwgcmVsX3dpZHRocyA9IGMoMSwgMiksCiAgbGFiZWxzID0gIkFVVE8iKQoKZmlndXJlNC4xNV9jYXAgPC0gYWRkX3N1YihmaWd1cmU0LjE1X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDQuMTU6IERpZmZlcmVuY2Ugc2NvcmVzIGJldHdlZW4gNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBvZiBjb25jZXB0dWFsIHVuaXRzIGluIFN0dWR5IDQsIHVzaW5nIHRoZWlyIG93biBzY2FsZXMuIFRoaXMgaW5jbHVkZXMgZGlmZmVyZW5jZSBzY29yZXMgdXNpbmcgdGhlIHRocmVlLWZhY3RvciBFRkEgc29sdXRpb24gKHBhbmVsIEEpIGFuZCBkaWZmZXJlbmNlIHNjb3JlcyB1c2luZyB0aGUgZm91ci1mYWN0b3Igc29sdXRpb24gKHBhbmVsIEI7IHNlZSBUYWJsZSA0LjQpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMSwgc3VjaCB0aGF0IGRpZmZlcmVuY2Ugc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gLTEgdG8gKzEuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBkaWZmZXJlbmNlIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gVGhlIGRvdHRlZCBsaW5lIGNvcnJlc3BvbmRzIHRvIGVxdWFsIGVuZG9yc2VtZW50cyBvZiB0aGUgdHdvIGNvbmNlcHR1YWwgdW5pdHMgcGxvdHRlZCAoaS5lLiwgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiIsIDE4MCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMC4zOH0KZ2dkcmF3KGZpZ3VyZTQuMTVfY2FwKQpgYGAKCg==